以下是函式應用篇
第一題(strncat應用):
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main(void)
{
char s1[] =" Hi";
char s2[10];
cout<<"what is your name";
gets(s2);
strncat(s1,s2,5);
cout<<s1<<endl;
return 0;
}
講解此題程式碼:s1
初始化為 " Hi"
,而 s2
是一個大小為 10 的空字符數組。程式接著提示用戶輸入名字,並將用戶輸入的字串讀入 s2
中。使用 strncat
函數將 s2
的前 5 個字符附加到 s1
的末尾。最後,程式輸出合併後的 s1
字串。
第二題(strcmp應用):
#include <iostream>
#include <string.h>
using namespace std;
int main(void)
{
char s1 [] = "string is fun";
char s2 [] = "string is";
if(!strcmp (s1,s2))
cout<<"s1 and s2 are same(by strcmp)\n";
if(!strncmp (s1,s2,5))
cout<<"s1 and s2 are same (by strncmp)\n";
return 0;
}
講解此題程式碼:
首先,使用 strcmp
函數比較兩個字串是否完全相同。由於 s1
和 s2
不完全相同,strcmp
不會顯示任何訊息。接著,使用 strncmp
函數比較兩個字串的前 5 個字符是否相同。因為 s1
和 s2
的前 5 個字符都為 "string"
,所以 strncmp
會輸出 "s1 and s2 are same (by strncmp)"
。
第三題(strlen應用):
#include <iostream>
#include <string.h>
using namespace std;
int main(void)
{
int len;
char s[] = "string is fun";
len = strlen(s);
cout<<"string s is "<<len<<" long\n";
return 0;
}
講解此題程式碼:
首先,程式初始化字串 s
為 "string is fun"
。接著,使用 strlen
函數計算字串的長度並將其存儲在 len
變數中。最後,程式輸出 "string s is 15 long"
,其中 15
是字串的長度。
第四題(string 物件應用):
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string s1;
string s2("String is fun");
s1=s2;
s2=s1+s2;
cout<<"String1 is: "<<s1<<endl;
cout<<"String2 is: "<<s2<<endl;
return 0;
}
講解此題程式碼:
首先,s2
被初始化為 "String is fun"
,然後 s1
被賦值為 s2
的內容。接著,將 s1
和 s2
連接後儲存在 s2
中,結果是 "String is funString is fun"
。程式最後輸出 s1
和 s2
的內容,顯示 "String1 is: String is fun"
和 "String2 is: String is funString is fun"
。
第五題(size函式應用):
#include <iostream>
#include <string>
using namespace std;
int main (void)
{
string s1;
string s2("String is fun ");
if(s1.empty()){
cout<<"String is empty"<<endl;
}
cout<<"String2 is "<<s2.size()<<"characters long "<<endl;
return 0;
}
講解此題程式碼:
首先,s1
是一個空的字串。接著,s2
被初始化為 "String is fun "
。程式檢查 s1
是否為空,若是,則輸出 "String is empty"
。然後,輸出 s2
的長度(字元數),顯示 "String2 is 15 characters long"
。
第六題綜合練習(去除字串程式):
#include <iostream>
#include <string.h>
using namespace std;
void exclude (char*,char*);
int main (void)
{
char str1[]="It is an apple";
char str2[]="an";
exclude (str1,str2);
cout<<str1<<endl;
return 0;
}
void exclude(char *s1,char *s2)
{
int i,s2_len = strlen(s2);
for(i=0;i<(int)strlen(s1)-s2_len; i++){
if(!strncmp (s1+i,s2, s2_len)){
strcpy (s1+i,s1+i+s2_len);
i--;
}
}
}
講解此題程式碼:
此程式碼定義了一個 exclude
函數,從 str1
中移除所有 str2
的出現。主函數初始化 str1
為 "It is an apple"
和 str2
為 "an"
,並調用 exclude
函數。exclude
函數逐字符檢查 str1
是否包含 str2
,若找到則用後面的字串覆蓋掉 str2
的位置。
!!以上是跟著第一次學C++就上手第二版第九章後半部一起學習的!!
今天的內容比較複雜一點,實作的小練習也比較多。遇到的困難點是需先理解每一個應用才有辦法連著繼續做,而在strcmp那個應用實作中程式一直無法執行所以跳回去原本先去理解之後再跟著書本的步驟一步一步來最後才執行完畢。明天會往前置處理器及結構單元邁進,希望一切順利囉~